# 设置项目所需的最低 CMake 版本
cmake_minimum_required(VERSION 3.10)
project(LumineEngine CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ==============================================================================
# 0. 查找外部依赖 (必须添加，用于设置环境)
# ==============================================================================

# 查找 Vulkan SDK。这将设置必要的编译器/链接器标志。
# find_package(Vulkan REQUIRED)
# 查找 GLFW3。这将设置必要的编译器/链接器标志。
# find_package(glfw3 CONFIG REQUIRED)


# ==============================================================================
# 1. 定义自定义依赖路径
# ==============================================================================

set(CUSTOM_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include")
set(CUSTOM_LIB_DIR     "${PROJECT_SOURCE_DIR}/lib")

# ==============================================================================
# 2. 收集内部源文件
# ==============================================================================

# 保持当前的清晰的目录匹配，但请注意 file(GLOB) 的限制
file(GLOB LUMINE_SOURCE_FILES
    "src/main.cpp"
    "src/Core/*.cpp"
    "src/Core/Buffer/*.cpp"
    "src/Core/Context/*.cpp"
    "src/Core/Pipeline/*.cpp"
    "src/Core/Swapchain/*.cpp"
    "src/Core/Renderer/*.cpp"
    "src/Core/Texture/*.cpp"
    "src/Scene/*.cpp"
    "src/Utils/*.cpp" 
)

# ==============================================================================
# 3. 创建可执行文件目标
# ==============================================================================

add_executable(LumineEngine ${LUMINE_SOURCE_FILES})

# ==============================================================================
# 4. 配置头文件搜索路径
# ==============================================================================

target_include_directories(LumineEngine PUBLIC
    "${CUSTOM_INCLUDE_DIR}"  # 外部依赖头文件
    "${PROJECT_SOURCE_DIR}/src" # 内部组件头文件
)


# ==============================================================================
# 5. 配置库文件搜索路径
# ==============================================================================

# 告诉链接器在哪里找库文件
target_link_directories(LumineEngine PRIVATE
    "${CUSTOM_LIB_DIR}"
)

# ==============================================================================
# 6. 链接依赖项
# ==============================================================================

# 推荐：使用 find_package 创建的导入目标 (如果 SDK 兼容)
# target_link_libraries(LumineEngine PRIVATE Vulkan::Vulkan glfw) 
# 如果 find_package 失败，使用自定义路径中的文件名：
target_link_libraries(LumineEngine PRIVATE
    vulkan-1 
    glfw3
    # ... 其他系统库（如 pthread, X11 等）
)


# ==============================================================================
# 7. 修正：添加头文件到 IDE 项目 (解决 VS 中 .hpp 文件缺失问题)
# ==============================================================================

# 修正匹配模式：确保递归匹配所有子目录下的 .hpp 文件
file(GLOB_RECURSE LUMINE_HEADER_FILES
    "src/*.hpp"
    "src/Core/*.hpp"
    "src/Core/*/*.hpp"
    "src/Scene/*.hpp"
    "src/Utils/*.hpp"
)

# 使用 FILE_SET 将头文件显式添加到 Visual Studio 项目中
target_sources(LumineEngine
    PUBLIC FILE_SET HEADERS
        BASE_DIRS "${PROJECT_SOURCE_DIR}/src"
        FILES ${LUMINE_HEADER_FILES}
)